Skip to content

Conversation

@titusfortner
Copy link
Member

@titusfortner titusfortner commented Jul 19, 2024

User description

This matches what is being done in other languages (#13991)

In general it isn't user friendly that that web_socket_url value to the driver is a boolean, but the response is a string. This provides a more obvious name for users to set the property.

This allows Options class to use #enable_bidi! and #bidi? as the booleans for the options.
Capabilities will return driver.capabilities[:web_socket_url] with either nil or the value of the url.

We ok with my use of bang and predicate here?


PR Type

Enhancement, Tests


Description

  • Added enable_bidi! method to Selenium::WebDriver::Options to set web_socket_url to true.
  • Added bidi? method to check if web_socket_url is enabled.
  • Added integration test for enabling bidi in Chrome options, verifying web_socket_url and bidi? method behavior.
  • Added unit test for enable_bidi! method, verifying setting and querying of bidi option.

Changes walkthrough 📝

Relevant files
Enhancement
options.rb
Add methods to enable and check bidi in options                   

rb/lib/selenium/webdriver/common/options.rb

  • Added enable_bidi! method to set web_socket_url to true.
  • Added bidi? method to check if web_socket_url is enabled.
  • +8/-0     
    Tests
    options_spec.rb
    Add integration test for enabling bidi in Chrome options 

    rb/spec/integration/selenium/webdriver/chrome/options_spec.rb

  • Added integration test for enabling bidi in Chrome options.
  • Verified web_socket_url and bidi? method behavior.
  • +18/-0   
    options_spec.rb
    Add unit test for enable_bidi! method in Chrome options   

    rb/spec/unit/selenium/webdriver/chrome/options_spec.rb

  • Added unit test for enable_bidi! method.
  • Verified setting and querying of bidi option.
  • +12/-0   

    💡 PR-Agent usage:
    Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    @titusfortner titusfortner added the C-rb Ruby Bindings label Jul 19, 2024
    @titusfortner titusfortner requested a review from p0deje July 19, 2024 20:06
    @qodo-code-review
    Copy link
    Contributor

    PR Reviewer Guide 🔍

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 PR contains tests
    🔒 No security concerns identified
    ⚡ Key issues to review

    Code Clarity
    The use of the bang (!) in enable_bidi! suggests that the method could raise an exception or has a dangerous side effect, which does not seem to be the case here. Consider renaming to enable_bidi if there are no such implications.

    Redundant Code
    The double negation in !!@options[:web_socket_url] is redundant. Ruby implicitly treats nil as false in boolean contexts, so @options[:web_socket_url] is sufficient.

    @qodo-code-review
    Copy link
    Contributor

    qodo-code-review bot commented Jul 19, 2024

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Possible bug
    Update the enable_bidi! method to accept and set a URL instead of a boolean

    The method enable_bidi! sets @options[:web_socket_url] to true, which seems
    incorrect as it should likely store a WebSocket URL string instead of a boolean.
    Consider updating this method to accept a URL parameter or fetch it from a
    configuration.

    rb/lib/selenium/webdriver/common/options.rb [95]

    -def enable_bidi!
    -  @options[:web_socket_url] = true
    +def enable_bidi!(url)
    +  @options[:web_socket_url] = url
     end
     
    • Apply this suggestion
    Suggestion importance[1-10]: 9

    Why: This suggestion addresses a potential bug by ensuring that the enable_bidi! method sets a WebSocket URL instead of a boolean, which aligns with the expected behavior of handling a URL.

    9
    Enhancement
    Modify the bidi? method to correctly handle URL strings

    The bidi? method uses a double negation (!!) to convert the value to a boolean. This
    is unnecessary if @options[:web_socket_url] is always a boolean. If
    @options[:web_socket_url] is intended to be a URL string, adjust the method to check
    for nil or an empty string instead.

    rb/lib/selenium/webdriver/common/options.rb [99]

     def bidi?
    -  !!@options[:web_socket_url]
    +  !@options[:web_socket_url].nil? && !@options[:web_socket_url].empty?
     end
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This enhancement ensures that the bidi? method correctly checks for the presence of a WebSocket URL, improving the robustness of the code.

    8
    Possible issue
    Update the test to check for a valid WebSocket URL format

    The test case for enable_bidi! assumes web_socket_url to be a boolean, which
    contradicts the expected behavior of handling a URL. Update the test to check for a
    valid URL format instead of a boolean.

    rb/spec/integration/selenium/webdriver/chrome/options_spec.rb [56]

    -expect(options.web_socket_url).to be true
    +expect(options.web_socket_url).to match(/\Aws:\/\/.+/)
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This suggestion improves the test case by ensuring it checks for a valid WebSocket URL format, which aligns with the expected behavior of the enable_bidi! method.

    8
    Adjust the unit test to validate that web_socket_url is a properly formatted URL

    Similar to the integration test, the unit test for enable_bidi! should verify that
    web_socket_url is set to a valid URL, not just a boolean. Adjust the expectation to
    validate the format of the URL.

    rb/spec/unit/selenium/webdriver/chrome/options_spec.rb [152]

    -expect(options.web_socket_url).to be true
    +expect(options.web_socket_url).to match(/\Aws:\/\/.+/)
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This suggestion enhances the unit test by verifying that web_socket_url is a valid URL, ensuring consistency with the expected behavior of the enable_bidi! method.

    8

    @qodo-code-review
    Copy link
    Contributor

    qodo-code-review bot commented Jul 19, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit ceaa988)

    Action: Ruby / Remote Tests (edge, windows) / Remote Tests (edge, windows)

    Failed stage: Run Bazel [❌]

    Failed test name: Selenium::WebDriver::Edge::Options enables bidi

    Failure summary:

    The action failed due to two specific test failures in the Selenium WebDriver integration tests for
    Edge:

  • The test Selenium::WebDriver::Edge::Options enables bidi failed because it attempted to load a
    non-existent file selenium/webdriver/chrome, which resulted in a LoadError. The correct file might
    be selenium/webdriver/chromium.
  • The test Selenium::WebDriver::Edge::Options enables BiDi on initialization also failed due to a
    LoadError when trying to initialize the WebDriver for Edge with certain options.

  • Relevant error logs:
    1:  ##[group]Operating System
    2:  Microsoft Windows Server 2022
    ...
    
    743:  �[32m[1,847 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/helpers.cc [for tool]; 5s local, disk-cache ... (4 actions running)
    744:  �[32m[1,848 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/file.cc [for tool]; 2s local, disk-cache ... (4 actions running)
    745:  �[32m[1,849 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/file.cc [for tool]; 4s local, disk-cache ... (4 actions, 3 running)
    746:  �[32m[1,852 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 1s local, disk-cache ... (4 actions running)
    747:  �[32m[1,865 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 2s local, disk-cache ... (4 actions, 3 running)
    748:  �[32m[1,892 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 3s local, disk-cache ... (4 actions, 3 running)
    749:  �[32m[2,058 / 3,107]�[0m Compiling src/google/protobuf/compiler/command_line_interface.cc [for tool]; 4s local, disk-cache ... (3 actions, 1 running)
    750:  �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    751:  java\src\org\openqa\selenium\remote\ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    752:  private final ErrorCodes errorCodes;
    753:  ^
    754:  java\src\org\openqa\selenium\remote\ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    755:  this.errorCodes = new ErrorCodes();
    756:  ^
    757:  java\src\org\openqa\selenium\remote\ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    758:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    759:  ^
    760:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    761:  ErrorCodes errorCodes = new ErrorCodes();
    762:  ^
    763:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    764:  ErrorCodes errorCodes = new ErrorCodes();
    765:  ^
    766:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    767:  response.setStatus(ErrorCodes.SUCCESS);
    768:  ^
    769:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    770:  response.setState(ErrorCodes.SUCCESS_STRING);
    771:  ^
    772:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    773:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    774:  ^
    775:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    776:  new ErrorCodes().getExceptionType((String) rawError);
    777:  ^
    778:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    779:  private final ErrorCodes errorCodes = new ErrorCodes();
    780:  ^
    781:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    782:  private final ErrorCodes errorCodes = new ErrorCodes();
    783:  ^
    784:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    785:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    786:  ^
    787:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:101: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    788:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    789:  ^
    790:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:103: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    791:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    792:  ^
    793:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:117: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    794:  response.setStatus(ErrorCodes.SUCCESS);
    795:  ^
    796:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:118: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    797:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    798:  ^
    799:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:124: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    800:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    801:  ^
    802:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    803:  private final ErrorCodes errorCodes = new ErrorCodes();
    804:  ^
    805:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    806:  private final ErrorCodes errorCodes = new ErrorCodes();
    807:  ^
    808:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:93: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    809:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    810:  ^
    811:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:98: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    812:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    813:  ^
    814:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:145: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    815:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    1014:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 182s local, disk-cache ... (4 actions, 2 running)
    1015:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 185s local, disk-cache ... (4 actions, 2 running)
    1016:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 189s local, disk-cache ... (4 actions, 2 running)
    1017:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 190s local, disk-cache ... (4 actions, 1 running)
    1018:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 201s local, disk-cache ... (4 actions, 1 running)
    1019:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 204s local, disk-cache ... (4 actions, 1 running)
    1020:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 219s local, disk-cache ... (4 actions, 2 running)
    1021:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver/edge:options-edge-remote (see D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test.log)
    1022:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver/edge:options-edge-remote (Summary)
    ...
    
    1033:  platform: windows
    1034:  ci: github
    1035:  rbe: false
    1036:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1037:  Selenium::WebDriver::Edge::Options
    1038:  passes emulated device correctly
    1039:  passes emulated user agent correctly
    1040:  passes args correctly
    1041:  enables bidi (FAILED - 1)
    1042:  enables BiDi on initialization (FAILED - 2)
    1043:  Failures:
    1044:  1) Selenium::WebDriver::Edge::Options enables bidi
    1045:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1046:  LoadError:
    1047:  cannot load such file -- selenium/webdriver/chrome
    1048:  Did you mean?  selenium/webdriver/chromium
    1049:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1050:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1051:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1052:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1053:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1054:  LoadError:
    ...
    
    1059:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1060:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1061:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1062:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1063:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1064:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1065:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1066:  Finished in 24.51 seconds (files took 1.11 seconds to load)
    1067:  5 examples, 2 failures
    1068:  Failed examples:
    ...
    
    1078:  platform: windows
    1079:  ci: github
    1080:  rbe: false
    1081:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1082:  Selenium::WebDriver::Edge::Options
    1083:  passes emulated device correctly
    1084:  passes emulated user agent correctly
    1085:  passes args correctly
    1086:  enables bidi (FAILED - 1)
    1087:  enables BiDi on initialization (FAILED - 2)
    1088:  Failures:
    1089:  1) Selenium::WebDriver::Edge::Options enables bidi
    1090:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1091:  LoadError:
    1092:  cannot load such file -- selenium/webdriver/chrome
    1093:  Did you mean?  selenium/webdriver/chromium
    1094:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1095:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1096:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1097:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1098:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1099:  LoadError:
    ...
    
    1104:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1105:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1106:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1107:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1108:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1109:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1110:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1111:  Finished in 21.49 seconds (files took 1.01 seconds to load)
    1112:  5 examples, 2 failures
    1113:  Failed examples:
    ...
    
    1123:  platform: windows
    1124:  ci: github
    1125:  rbe: false
    1126:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1127:  Selenium::WebDriver::Edge::Options
    1128:  passes emulated device correctly
    1129:  passes emulated user agent correctly
    1130:  passes args correctly
    1131:  enables bidi (FAILED - 1)
    1132:  enables BiDi on initialization (FAILED - 2)
    1133:  Failures:
    1134:  1) Selenium::WebDriver::Edge::Options enables bidi
    1135:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1136:  LoadError:
    1137:  cannot load such file -- selenium/webdriver/chrome
    1138:  Did you mean?  selenium/webdriver/chromium
    1139:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1140:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1141:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1142:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1143:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1144:  LoadError:
    ...
    
    1149:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1150:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1151:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1152:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1153:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1154:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1155:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1156:  Finished in 21.76 seconds (files took 1.06 seconds to load)
    1157:  5 examples, 2 failures
    1158:  Failed examples:
    1159:  rspec ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:47 # Selenium::WebDriver::Edge::Options enables bidi
    1160:  rspec ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:65 # Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1161:  ================================================================================
    1162:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 36s ... (4 actions, 1 running)
    1163:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 46s ... (4 actions, 1 running)
    1164:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 49s ... (4 actions, 1 running)
    1165:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 33s ... (4 actions, 2 running)
    1166:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 35s ... (4 actions, 1 running)
    1167:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 46s ... (4 actions, 1 running)
    1168:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 47s ... (4 actions, 1 running)
    1169:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 33s ... (4 actions, 2 running)
    1170:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 35s ... (4 actions, 1 running)
    1171:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 45s ... (4 actions, 1 running)
    1172:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 47s ... (4 actions, 1 running)
    1173:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 38s ... (4 actions, 2 running)
    1174:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 39s ... (4 actions, 1 running)
    1175:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 49s ... (4 actions, 1 running)
    1176:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 52s ... (4 actions, 1 running)
    1177:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 43s ... (4 actions, 2 running)
    1178:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 44s ... (4 actions, 1 running)
    1179:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 54s ... (4 actions, 1 running)
    1180:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 58s ... (4 actions, 1 running)
    1181:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 38s ... (4 actions, 2 running)
    1182:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 39s ... (4 actions, 1 running)
    1183:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 50s ... (4 actions, 1 running)
    1184:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 54s ... (4 actions, 1 running)
    1185:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 32s ... (4 actions, 2 running)
    1186:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 33s ... (4 actions, 1 running)
    1187:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 44s ... (4 actions, 1 running)
    1188:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 46s ... (4 actions, 1 running)
    1189:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 37s ... (4 actions, 2 running)
    1190:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 39s ... (4 actions, 1 running)
    1191:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 49s ... (4 actions, 1 running)
    1192:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 52s ... (4 actions, 1 running)
    1193:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 27s ... (4 actions, 2 running)
    1194:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 29s ... (3 actions, 1 running)
    1195:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 39s ... (3 actions, 1 running)
    1196:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 18s ... (3 actions, 2 running)
    1197:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 20s ... (2 actions, 1 running)
    1198:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 30s ... (2 actions, 1 running)
    1199:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 15s local, disk-cache ... (2 actions running)
    1200:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 1s local, disk-cache
    1201:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 11s local, disk-cache
    1202:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 16s local, disk-cache
    1203:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 0s disk-cache
    1204:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote
    1205:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 1s local, disk-cache
    1206:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 15s local, disk-cache
    1207:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 0s disk-cache
    1208:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote
    1209:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 1s local, disk-cache
    1210:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 15s local, disk-cache
    1211:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 0s disk-cache
    1212:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote
    1213:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 1s local, disk-cache
    1214:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 87s local, disk-cache
    1215:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s disk-cache
    1216:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote
    1217:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s local, disk-cache
    1218:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 14s local, disk-cache
    1219:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 0s disk-cache
    1220:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote
    1221:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 1s local, disk-cache
    1222:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 15s local, disk-cache
    1223:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 0s disk-cache
    1224:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote
    1225:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 1s local, disk-cache
    1226:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 15s local, disk-cache
    1227:  �[32mINFO: �[0mFound 31 test targets...
    1228:  �[32mINFO: �[0mElapsed time: 1597.229s, Critical Path: 687.20s
    1229:  �[32mINFO: �[0m2877 processes: 1429 disk cache hit, 1172 internal, 276 local.
    1230:  �[32mINFO: �[0mBuild completed, 1 test FAILED, 2877 total actions
    1231:  //rb/spec/integration/selenium/webdriver:action_builder-edge-remote      �[0m�[32mPASSED�[0m in 29.1s
    1232:  //rb/spec/integration/selenium/webdriver:bidi-edge-remote                �[0m�[32mPASSED�[0m in 15.0s
    1233:  //rb/spec/integration/selenium/webdriver:devtools-edge-remote            �[0m�[32mPASSED�[0m in 87.9s
    1234:  //rb/spec/integration/selenium/webdriver:driver-edge-remote              �[0m�[32mPASSED�[0m in 34.3s
    1235:  //rb/spec/integration/selenium/webdriver:element-edge-remote             �[0m�[32mPASSED�[0m in 29.8s
    1236:  //rb/spec/integration/selenium/webdriver:error-edge-remote               �[0m�[32mPASSED�[0m in 14.6s
    ...
    
    1253:  //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote  �[0m�[32mPASSED�[0m in 15.5s
    1254:  //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote        �[0m�[32mPASSED�[0m in 15.1s
    1255:  //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote         �[0m�[32mPASSED�[0m in 15.1s
    1256:  //rb/spec/integration/selenium/webdriver/edge:driver-edge-remote         �[0m�[32mPASSED�[0m in 34.2s
    1257:  //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote        �[0m�[32mPASSED�[0m in 15.3s
    1258:  //rb/spec/integration/selenium/webdriver/edge:service-edge-remote        �[0m�[32mPASSED�[0m in 22.2s
    1259:  //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote       �[0m�[32mPASSED�[0m in 31.3s
    1260:  //rb/spec/integration/selenium/webdriver/remote:element-edge-remote      �[0m�[32mPASSED�[0m in 17.2s
    1261:  //rb/spec/integration/selenium/webdriver/edge:options-edge-remote        �[0m�[31m�[1mFAILED�[0m in 3 out of 3 in 32.4s
    1262:  Stats over 3 runs: max = 32.4s, min = 29.3s, avg = 30.5s, dev = 1.4s
    1263:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test.log
    1264:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test_attempts/attempt_1.log
    1265:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test_attempts/attempt_2.log
    1266:  Executed 31 out of 31 tests: 30 tests pass and �[0m�[31m�[1m1 fails locally�[0m.
    1267:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    1268:  �[0m
    1269:  ##[error]Process completed with exit code 1.
    

    ✨ CI feedback usage guide:

    The CI feedback tool (/checks) automatically triggers when a PR has a failed check.
    The tool analyzes the failed checks and provides several feedbacks:

    • Failed stage
    • Failed test name
    • Failure summary
    • Relevant error logs

    In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:

    /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
    

    where {repo_name} is the name of the repository, {run_number} is the run number of the failed check, and {job_number} is the job number of the failed check.

    Configuration options

    • enable_auto_checks_feedback - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
    • excluded_checks_list - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
    • enable_help_text - if set to true, the tool will provide a help message with the feedback. Default is true.
    • persistent_comment - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.
    • final_update_message - if persistent_comment is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true.

    See more information about the checks tool in the docs.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Labels

    C-rb Ruby Bindings P-enhancement PR with a new feature Review effort [1-5]: 2

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    6 participants